<template>
  <view class="search" :class="{focused:isSearch}">
    <view class="sinput">
      <input v-model="keyword"
      @confirm="goList"
      @input="searchPrd"
      @focus="search"
      type="text" placeholder="搜索" />
      <button @click="cancel">取消</button>
    </view>
    <view class="scontent" v-show="isSearch">
      <div class="title">
        搜索历史
        <span class="clear" @click="clearHistory"></span>
      </div>
      <div class="history" v-if="list.length === 0">
        <navigator :url="`/packone/list/index?query=${item}`"
        v-for="(item,i) in history"
        :key="i">{{item}}</navigator>
      </div>
      <!-- 搜索建议结果 -->
      <scroll-view scroll-y class="result" v-else>
        <navigator url="/packone/goods/index"
        :key="item.goods_id"
        v-for="item in list"
        >{{item.goods_name}}</navigator>
      </scroll-view>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      isSearch: false,
      // 搜索关键词
      keyword: '',
      // 搜索结果
      list: [],
      // 搜索历史
      // 如果本地有搜索历史先取本地
      history: uni.getStorageSync('history') || []
    };
  },
  methods: {
    search() {
      this.isSearch = true;
      const pageHeight = uni.getSystemInfoSync().windowHeight + "px";
      uni.hideTabBar();
      this.$emit("search", pageHeight);
    },
    cancel() {
      this.isSearch = false;
      uni.showTabBar();
      this.$emit("search", "auto");
      // 取消重置输入值
      this.keyword = '';
      this.list = [];
    },
    // 根据关键词请求搜索建议
    async searchPrd() {
      console.log(this.keyword);
      let {msg:{status}, data} = await this.request({
        url: '/api/public/v1/goods/qsearch',
        data: {
          query: this.keyword
        }
      });
      console.log(data);
      if (status === 200) {
        // 请求成功拿到搜索建议
        this.list = data;
      }
    },
    // 输入确定后跳转结果页面
    goList() {
      // 存储搜索历史
      // 方法一：includes()去重
      if (!this.history.includes(this.keyword)){
        this.history.unshift(this.keyword);
        uni.setStorage({
          key: 'history',
          data: this.history
        });
      }
      // 方法二：Set排重
      // this.history = [...new Set(this.history)];
      console.log('go');
      uni.navigateTo({
         url: `/packone/list/index?query=${this.keyword}`
      });
    },
    // 清除搜索历史
    clearHistory() {
      // 清除页面和本地两个地方
      this.history = [];
      uni.removeStorage({
        key: 'history'
      });
    }
  }
};
</script>

<style lang="scss">
// 搜索
.search {
  display: flex;
  flex-direction: column;
  .sinput {
    box-sizing: border-box;
    padding: 20rpx 16rpx;
    background: #ff2d4a;
    position: relative;
    //伪元素
    &::after {
      position: absolute;
      top: 28rpx;
      left: 302rpx;
      content: "";
      width: 44rpx;
      height: 44rpx;
      line-height: 1;
      background-image: url(https://static.botue.com/ugo/images/icon_search%402x.png);
      background-size: 32rpx;
      background-position: 6rpx center;
      background-repeat: no-repeat;
    }
    input {
      background: #fff;
      flex: 1;
      height: 60rpx;
      line-height: 60rpx;
      text-align: center;
      font-size: 24rpx;
      color: #bbb;
      border-radius: 5rpx;
    }
    button {
      display: none;
      margin-left: 20rpx;
      width: 150rpx;
      height: 60rpx;
      line-height: 60rpx;
      text-align: center;
      font-size: 24rpx;
      border-radius: 5rpx;
      background: transparent;
      color: #666;
    }
  }
  &.focused {
    position: absolute;
    width: 100%;
    height: 100%;
    z-index: 10;
    .sinput {
      display: flex;
      background: #eee;
      input {
        text-align: left;
        padding-left: 60rpx;
      }
      button {
        display: block;
      }
      &::after {
        left: 30rpx;
      }
    }
  }
  .scontent {
    background: #fff;
    position: relative;

    flex: 1;
    padding: 27rpx;
    .title {
      font-size: 27rpx;
      line-height: 1;
      color: #333;
    }
    .clear {
      display: block;
      width: 27rpx;
      height: 27rpx;
      float: right;
      background-image: url(http://static.botue.com/ugo/images/clear.png);
      background-size: cover;
    }

    .history {
      padding-top: 30rpx;
      navigator {
        display: inline-block;
        line-height: 1;
        padding: 15rpx 20rpx 12rpx;
        background-color: #ddd;
        font-size: 24rpx;
        margin-right: 20rpx;
        margin-bottom: 15rpx;
        color: #333;
      }
    }

    .result {
      // display: none;
      position: absolute;
      left: 0;
      right: 0;
      top: 0;
      bottom: 0;
      background-color: #fff;
      navigator {
        line-height: 1;
        padding: 20rpx 30rpx;
        font-size: 24rpx;
        color: #666;
        border-bottom: 1px solid #eee;

        &:last-child {
          border-bottom: none;
        }
      }
    }
  }
}
</style>